#include "stdafx.h"
#include "app.h"

static HINSTANCE basead = NULL;
static HWND window = NULL;
static HACCEL accel = NULL;

HINSTANCE GetInstance(void)
{
 return basead;
}

HINSTANCE SetInstance(HINSTANCE handle)
{
 HINSTANCE retval = basead;
 basead = handle;
 return retval;
}

HWND GetMainWindow(void)
{
 return window;
}

HWND SetMainWindow(HWND handle)
{
 HWND retval = window;
 window = handle;
 return retval;
}

int MessageLoop(void)
{
 MSG msg;
 while(GetMessage(&msg, 0, 0, 0)) {
       if(!accel || !TranslateAccelerator(GetMainWindow(), accel, &msg)) {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
         }
      }
 return (int)msg.wParam;
}

int MessagePump(void)
{
 MSG msg;
 for(;;) {
     BOOL status = GetMessage(&msg, NULL, 0, 0);
     if(status == -1) return -1;
     else if(status != 0) {
        if(!accel || !TranslateAccelerator(GetMainWindow(), accel, &msg)) {
           TranslateMessage(&msg);
           DispatchMessage(&msg);
          }
       }
     else
        break;
    }
 return (int)msg.wParam;
}

int MessagePump(BOOL (*function)(void))
{
 MSG msg;
 for(;;) {
     if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
        BOOL status = GetMessage(&msg, NULL, 0, 0);
        if(status == -1) return -1;
        else if(status != 0) {
           if(!accel || !TranslateAccelerator(GetMainWindow(), accel, &msg)) {
              TranslateMessage(&msg);
              DispatchMessage(&msg);
             }
          }
        else
           break;
       }
     else if(function() == FALSE)
        break;
    }
 return (int)msg.wParam;
}